package model

import "time"

// 用户表
type User struct {
	UserID        int64      `gorm:"primaryKey;column:user_id" json:"user_id"`
	Username      string     `gorm:"column:username;size:50;not null" json:"username"`
	Password      string     `gorm:"column:password;size:255;not null" json:"password"`
	Email         string     `gorm:"column:email;size:100" json:"email"`
	Phone         string     `gorm:"column:phone;size:20" json:"phone"`
	RegisterTime  time.Time  `gorm:"column:register_time;autoCreateTime" json:"register_time"`
	LastLoginTime *time.Time `gorm:"column:last_login_time" json:"last_login_time"` // 允许 NULL
	Status        int        `gorm:"column:status;default:1" json:"status"`
	VipLevel      int        `gorm:"column:vip_level;default:0" json:"vip_level"`
}

// 商品表
type Product struct {
	ProductID   int64     `gorm:"primaryKey;column:product_id" json:"product_id"`
	ProductName string    `gorm:"column:product_name;size:100;not null" json:"product_name"`
	CategoryID  int64     `gorm:"column:category_id" json:"category_id"`
	BrandID     int64     `gorm:"column:brand_id" json:"brand_id"`
	Price       float64   `gorm:"column:price;default:0.00" json:"price"`
	Stock       int       `gorm:"column:stock;default:0" json:"stock"`
	Description string    `gorm:"column:description;type:text" json:"description"`
	CreateTime  time.Time `gorm:"column:create_time;autoCreateTime" json:"create_time"`
	UpdateTime  time.Time `gorm:"column:update_time;autoUpdateTime" json:"update_time"`
	Status      int       `gorm:"column:status;default:1" json:"status"`
	SalesCount  int       `gorm:"column:sales_count;default:0" json:"sales_count"`
	ImageURL    string    `gorm:"column:image_url;size:255" json:"image_url"`
}

// 订单表
type Order struct {
	OrderID      int64      `gorm:"primaryKey;column:order_id" json:"order_id"`
	UserID       int64      `gorm:"column:user_id" json:"user_id"`
	OrderNo      string     `gorm:"column:order_no;size:64;unique;not null" json:"order_no"`
	TotalAmount  float64    `gorm:"column:total_amount;default:0.00" json:"total_amount"`
	PayAmount    float64    `gorm:"column:pay_amount;default:0.00" json:"pay_amount"`
	OrderStatus  int        `gorm:"column:order_status;default:1" json:"order_status"`
	PayType      int        `gorm:"column:pay_type;default:0" json:"pay_type"`
	CreateTime   time.Time  `gorm:"column:create_time;autoCreateTime" json:"create_time"`
	PayTime      *time.Time `gorm:"column:pay_time" json:"pay_time"`
	DeliveryTime *time.Time `gorm:"column:delivery_time" json:"delivery_time"`
	CompleteTime *time.Time `gorm:"column:complete_time" json:"complete_time"`
	AddressID    int64      `gorm:"column:address_id" json:"address_id"`
	OrderType    int        `gorm:"column:order_type;default:1" json:"order_type"`
}

// 订单详情表
type OrderItem struct {
	ItemID       int64   `gorm:"primaryKey;column:item_id" json:"item_id"`
	OrderID      int64   `gorm:"column:order_id" json:"order_id"`
	ProductID    int64   `gorm:"column:product_id" json:"product_id"`
	ProductName  string  `gorm:"column:product_name;size:100" json:"product_name"`
	ProductPrice float64 `gorm:"column:product_price;default:0.00" json:"product_price"`
	Quantity     int     `gorm:"column:quantity;default:1" json:"quantity"`
	TotalPrice   float64 `gorm:"column:total_price;default:0.00" json:"total_price"`
	Discount     float64 `gorm:"column:discount;default:0.00" json:"discount"`
}

// 商品分类表
type Category struct {
	CategoryID   int64     `gorm:"primaryKey;column:category_id" json:"category_id"`
	CategoryName string    `gorm:"column:category_name;size:50;not null" json:"category_name"`
	ParentID     int64     `gorm:"column:parent_id;default:0" json:"parent_id"`
	Level        int       `gorm:"column:level;default:1" json:"level"`
	SortOrder    int       `gorm:"column:sort_order;default:0" json:"sort_order"`
	Status       int       `gorm:"column:status;default:1" json:"status"`
	CreateTime   time.Time `gorm:"column:create_time;autoCreateTime" json:"create_time"`
	IconURL      string    `gorm:"column:icon_url;size:255" json:"icon_url"`
}

// 品牌表
type Brand struct {
	BrandID     int64     `gorm:"primaryKey;column:brand_id" json:"brand_id"`
	BrandName   string    `gorm:"column:brand_name;size:100;not null" json:"brand_name"`
	Description string    `gorm:"column:description;type:text" json:"description"`
	LogoURL     string    `gorm:"column:logo_url;size:255" json:"logo_url"`
	Status      int       `gorm:"column:status;default:1" json:"status"`
	CreateTime  time.Time `gorm:"column:create_time;autoCreateTime" json:"create_time"`
}
